﻿package payments;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CheckboxMenuItem;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextField;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import java.io.File;
import java.io.IOException;

import java.math.BigDecimal;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

import jxl.Cell;
import jxl.JXLException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import org.hsqldb.jdbc.jdbcPreparedStatement;	//1.8.1
//import org.hsqldb.jdbcPreparedStatement;	// 1.7.1


public class PaymentsPanel extends Frame  implements ActionListener, TextListener, ItemListener
 {
  	private static final long serialVersionUID = 1L;

	//****************************************************************************************************
	//Переменные
	//****************************************************************************************************
	
  	//Элементы интерфейса
	static java.awt.Label label_id, label_m, label_d, label_k, label_n, label_s, label_t, label_r;
	static TextField input_d, input_n, input_s;						//текстов. поля
  	static Choice choice_m,choice_k;								//выпадающие списки

  	//меню
  	static Menu fm, sm, bdm, hlpm;			/** File, Options, Help */
  	static Menu spSubm;					/** Options Sub-Menu */
  	static MenuItem exitItem;			/** The MenuItem for exiting. */
  	static CheckboxMenuItem cb, cb1;	/** An option that can be on or off. */
  	
  	//кнопки
  	static Button button_w, firstr, lastr, prevr, nextr, newr, updat, downdat, nowdat, totalrfr;							//кнопки		
  	static String bname;											//label кнопки button_w
  	
	//цвет кнопки
  	static Color bcolor;
  	
  	//далоговое окно
  	static YesNoDialog yn;
  	
  	//Переменные для input_d, input_n, input_s
  	static String s, d, n;							
  	  	
  	//кол-во чисел после запятой для подсчета итоговой суммы
  	static BigDecimal summ = new BigDecimal(0).setScale(2);
  	
  	//для даты
  	final static SimpleDateFormat dateformatDDMMYYYY = new SimpleDateFormat("dd.MM.yyyy");   		//формат даты 01.01.2011
  	static Date dateNow = new Date();																//дата сдачи денег
  	static StringBuilder nowDDMMYYYY = new StringBuilder(dateformatDDMMYYYY.format(dateNow));
  	
    //диалоговое окно при загрузке списка клиентов из файла
  	static UseFileDialog ufd = new UseFileDialog();										 
   	
  	//файл настроек
  	static INIFile prop;
  	//менеджер по умолчанию
  	static String MANAGER;	
  	static String MANAGER2;	//менеджер в транслите
  	//основные директории
	static String PROGRAM_DIR;
	static String BASE_DIR;
	static String UPLOAD_DIR;
	static String DOWNLOAD_DIR;
	//jdbc класс и url
  	static String CLASS_JDBC;
  	static String URL;
  		
  	//ДЛЯ БД
  	static Connection conn;
  	
  	//Для файла xls
  	static File fileXls;
	static Workbook workbookR;
	static Sheet excelSheetR;
	static WritableWorkbook workbook;
	static WritableSheet excelSheet;
	static WorkbookSettings wbSettings = new WorkbookSettings();
	
	//Форматы шрифтов для xls
	final static WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);		// Lets create a times font
	final static WritableCellFormat times = new WritableCellFormat(times10pt);			// Define the cell format
	
	//списки без повторяющихся значений
	static Set klients = new HashSet();
	static Set managers = new HashSet();
			
//***************************************************************************************  
	public PaymentsPanel() 
	{
		super("Реестр Платежей");
        setSize(330, 310);
		
        //********************************************************************************
        //для JXL
        wbSettings.setLocale(new Locale("en", "EN"));
    	wbSettings.setArrayGrowSize(1024);
    	wbSettings.setInitialFileSize(1024);
        
        //********************************************************************************
        //файл настроек
        try {
        	prop = new INIFile(".\\options\\properties.ini");
		} 
        	catch (IOException e3) {e3.printStackTrace();}
    
        //Менеджер по умолчанию из файла
        MANAGER = prop.getProperty("conf","manager","" );
        MANAGER2 = prop.getProperty("conf","manager2","" );
        //и основные директории
        PROGRAM_DIR = prop.getProperty("path","programdir","" );
        BASE_DIR = prop.getProperty("path","basedir","" );
        UPLOAD_DIR = prop.getProperty("path","uploaddir","" );
        DOWNLOAD_DIR = prop.getProperty("path","downloaddir","" );
        //jdbc класс и url
        CLASS_JDBC = prop.getProperty("connect","classjdbc","" );
        URL = prop.getProperty("connect","urljdbc","" );
        
        //Класс jdbc
        try {
			Class.forName(CLASS_JDBC);
		}
        	catch (ClassNotFoundException e3) {e3.printStackTrace();}
                
        //создадим директории для работы программы
        if (!new File(PROGRAM_DIR.toString()).exists()){
    		new File(PROGRAM_DIR.toString()).mkdir();
    	}
        
        if (!new File(UPLOAD_DIR.toString()).exists()){
    		new File(UPLOAD_DIR.toString()).mkdir();
    	}
        
        if (!new File(DOWNLOAD_DIR.toString()).exists()){
    		new File(DOWNLOAD_DIR.toString()).mkdir();
    	}
        
        if (!new File(BASE_DIR.toString()).exists()){
        	new File(BASE_DIR.toString()).mkdir();
        	
        	ReCreateBase();
        }
        
      
//***************************************************************************************  
      //***************************************************************************************  
        //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
        // события окна    
        //*******************************************************************************
        addWindowListener( new WindowAdapter(){
        	public void windowClosing(WindowEvent e){
        		System.exit(0);}
        });
        
		//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
		//Обработка изменений фокуса полей 
        //***************************************************************************************
        
		FocusListener FocusL = new FocusListener() {

		
			public void focusGained(FocusEvent arg0) {}

			
			public void focusLost(FocusEvent arg0) {
				
				//Поле Даты
				if (((Component) arg0.getSource()).equals(input_d)){
					
					//пересчитать TOTAL
					try{
						Process(true);
						CheckFields();
						RefreshTotal();
					}
					finally{
						Process(false);
					}
				}
				
				//Поле НН				
				if (((Component) arg0.getSource()).equals(input_n)){}
				
				//Поле Суммы
				if (((Component) arg0.getSource()).equals(input_s)){}
			}
		};
		
		//*******************************************************************************
		//Обработка событий изменения полей
		//*******************************************************************************
        TextListener TextL = new TextListener() 
        {
        	
        	public void textValueChanged(TextEvent arg0) 
        	{	
        		//*******************************************************************************
        		//Для проверки ввода номера накладной
        		//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_n)){}
        		
        		//*******************************************************************************
        		//Для проверки ввода суммы
        		//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_s)){}
        		
        		//*******************************************************************************
              	//Для проверки ввода даты
              	//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_d)){
        			d=input_d.getText();
        			if (d.equals(nowDDMMYYYY.toString())){
        				nowdat.setBackground(Color.LIGHT_GRAY);        				
        			}
        			else{nowdat.setBackground(Color.RED);}
        		}
        	       		
        	}
        	        	
        };
        
//***************************************************************************************  
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
        //*******************************************************************************
		//Обработка нажатий кнопок Меню
		//*******************************************************************************
        ActionListener MenuListener = new ActionListener()
        {
			
			public void actionPerformed(ActionEvent arg0)
			{
				String action = arg0.getActionCommand();
				//*******************************************************************************
       			//Для кнопки Выход
        		//*******************************************************************************
       			if (action.equals("Выход"))
       			{
       				YesNoDialog yn = new YesNoDialog(PaymentsPanel.this, "Выйти?");
       				yn.setVisible(true);
       				
       				if (yn.getResult())
       				{
       					System.out.println("Exiting.");
       					PaymentsPanel.this.dispose();
       					System.exit(0);
       				}
       			} 
				
       		//*******************************************************************************
        		//Для кнопки Загрузить Клиентов
        		//*******************************************************************************
        		if (action.equals("Загрузить Клиентов")) 
        		{
        			try {
        				Process(true);
        				LoadKlients(true);
        			}
        			finally{
        				Process(false);
        			}
        		}               
       			
        		//*******************************************************************************
        		//Для кнопки Выгрузить РП
        		//*******************************************************************************
        		if (action.equals("Выгрузить РП")) 
        		{
        			if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)) 
        			{
        				
        				//имя для файла выгрузки
        				fileXls = new File(UPLOAD_DIR,
        												"rp_" + 
        												Translit.translit(choice_m.getSelectedItem()) +
        												"_"+
        												input_d.getText() + 
        												".xls");
        	
        				//проверим существование файла с таким именем
        				if(fileXls.exists()){
        					YesNoDialog ynd = new YesNoDialog(PaymentsPanel.this,
				        								"Файл с именем " + 
				        								  "rp_" + Translit.translit(choice_m.getSelectedItem()) +
				        								  "_" + input_d.getText() + ".xls" +
				        									System.getProperty("line.separator") +
				        								"существует!" + 
				        									System.getProperty("line.separator") +
				        								"Заменить?");
							    						
        					ynd.setVisible(true);
        					
    						if (!ynd.getResult()) {
    							return;
    						}
        				}
        				
        				Process(true);
        				try {
        					workbook = Workbook.createWorkbook(fileXls, wbSettings);
        				}
        					catch (IOException e1){e1.printStackTrace();}
        					
        				workbook.createSheet("Report", 0);
        				excelSheet = workbook.getSheet(0);
        			
        				excelSheet.setColumnView(0, 2);
        				excelSheet.setColumnView(1, 6);
        				excelSheet.setColumnView(2, 9);
        				excelSheet.setColumnView(3, 22);
        				excelSheet.setColumnView(4, 6);
        				excelSheet.setColumnView(5, 10);
        				
        				WritableCellFormat wcfId = new WritableCellFormat(new  jxl.write.NumberFormat("0"));
        				WritableCellFormat wcfSuma = new WritableCellFormat(new  jxl.write.NumberFormat("0.00"));
        				try {
							wcfId.setShrinkToFit(true);
							wcfSuma.setShrinkToFit(true);
						} 
        					catch (WriteException e2) {e2.printStackTrace();}
        				    
        				//total в ts
        				double ts = RefreshTotal().doubleValue();
        				//счетчик строк
        				int iid = 0;
        				
        				//	Write  headers
        				try{
        					excelSheet.addCell(new Label(0, 0, "id", times));
        					excelSheet.addCell(new Label(1, 0, "manager", times));
        					excelSheet.addCell(new Label(2, 0, "day", times));
        					excelSheet.addCell(new Label(3, 0, "klient", times));
        					excelSheet.addCell(new Label(4, 0, "nn", times));
        					excelSheet.addCell(new Label(5, 0, "summ", times));
        					excelSheet.addCell(new Label(6, 0, "total", times));
        					excelSheet.addCell(new Number(6, 1, ts, wcfSuma));
        				}
        					catch (RowsExceededException e1){e1.printStackTrace();}
        					catch (WriteException e1){e1.printStackTrace();}
        			
        				Connection conn = null;
        				try{conn = DriverManager.getConnection(URL, "sa", "");} 
       						catch (SQLException e2) {e2.printStackTrace();}
       				
        				Statement stmt = null;
        				try {stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);}
							catch (SQLException e) {e.printStackTrace();}
    	            
        				ResultSet rs = null;
					
        				try 
        				{
        					rs = stmt.executeQuery(
        							"SELECT * FROM sample WHERE" +
        									" MANAGER= '" + choice_m.getSelectedItem() + "'" + 
        									" AND" +
        									" DAT= '" +  input_d.getText() + "'" +
        									" ORDER BY KlIENT, SUMA"
        									
        							);
        				}
							catch (SQLException e) {e.printStackTrace();}
    	       			
        				 
        				try {
        					while (rs.next())
        					{
        						try 
        						{
        							int id = rs.getRow();
								
        							excelSheet.addCell(new Number(0, id, rs.getInt("ID"), wcfId));
        							excelSheet.addCell(new Label(1, id, rs.getString("MANAGER"), times));
        							excelSheet.addCell(new Label(2, id, rs.getString("DAT"), times));
        							excelSheet.addCell(new Label(3, id, rs.getString("KLIENT") , times));
        							excelSheet.addCell(new Label(4, id, rs.getString("NN"), times));
        							excelSheet.addCell(new Number(5, id, rs.getBigDecimal("SUMA").doubleValue(), wcfSuma));
        							
        							iid++;
        						}
		  							catch (RowsExceededException e1){e1.printStackTrace();}
		  							catch (WriteException e1){e1.printStackTrace();}
		        			}
						}
        					catch (SQLException e) {e.printStackTrace();}
    	            
        				finally
        				{
        					try 
        					{
        						//close connection
        						rs.close();
        						stmt.close();
        						conn.close();
        					} 
    	            			catch (SQLException e) {
    	            				Process(false);  
    	            				e.printStackTrace();
    	            			}
						
        					try{
        						workbook.write();
        						workbook.close();
        						System.out.println("РП выгружен");
        						YesDialog yd = new YesDialog(PaymentsPanel.this,"РП выгружен!" +
        									System.getProperty("line.separator") +
        								"Менеджер: " + choice_m.getSelectedItem() +
        									System.getProperty("line.separator") +
        								"Дата: " + input_d.getText() +
        									System.getProperty("line.separator") +
        								"Сумма: " + ts +
        									System.getProperty("line.separator")+
        								"Строк: " + iid);
        						yd.setVisible(true);
        						
        					} 
	        					catch (WriteException e1){
	        						e1.printStackTrace();
	        						Process(false);
	        					} 
	        					catch (IOException e1){
	        						e1.printStackTrace();
	        						Process(false);
	        					}
		
        					Process(false);        
        				}
        			}
        		}
        		
       			
        		//*******************************************************************************
       			//Для кнопки Список платежей
        		//*******************************************************************************
    
       			if (action.equals("Список платежей")) 
       			{
       				if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)) 
        			{ 
       					Process(true);
       					Connection conn = null;
       					try{
       						conn = DriverManager.getConnection(URL, "sa", "");
       					} 
       						catch (SQLException e2) {e2.printStackTrace();}
       				

       					System.out.println("*Выбрать все записи по ТП и по Дате*");
    	            
	    	            Statement stmt = null;
						try {stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);}
							catch (SQLException e) {e.printStackTrace();}
	    	            
						ResultSet rs = null;
						
						try 
						{
							rs = stmt.executeQuery("SELECT * FROM sample" +
													" WHERE" +
													" MANAGER= '" + 
														choice_m.getSelectedItem() + 
													"' AND" +
													" DAT= '" +  
														input_d.getText() +"'"
	        										);
							
						}
							catch (SQLException e) {e.printStackTrace();}
	    	            
						String str1 = "";
						
						ResultSetMetaData rsMeta = null;
						try{rsMeta = rs.getMetaData();}
							catch (SQLException e) {e.printStackTrace();}
	    	            
						int cntCol = 0;
						try {cntCol = rsMeta.getColumnCount();}
							catch (SQLException e) {e.printStackTrace();}
	    	            
						str1 = "(n)";
						 try {
							 for (int i = 1; i <= cntCol; ++i) {
								str1 = str1 + "(" + rsMeta.getColumnLabel(i).toLowerCase() + ") ";
							 }
						 }
						 	catch (SQLException e) {e.printStackTrace();}
						 
						 //название колонки для счетчика строк
						 str1 = str1 + "\n";
						 
						try {
							//счетчик строк
							int iid = 0;
							
							while (rs.next())
							{
								//для счетчика строк
								iid++;
 							    str1 = str1 + "("+ iid +")";
								    
								for (int i = 1; i <= cntCol; ++i) {
							        String val = null;
							        if (rsMeta.getColumnType(i) != Types.BLOB) {
							            val = rs.getString(i);
							        } else {
							            // convert UNICODE to java.lang.String
							            val = new String(rs.getBytes(i));
							        }
							        //сформируем строку
							        str1 = (str1 +"("+ val +")");
							    }
								//сформируем весь набор строк
							    str1 = (str1 +"\n");
							}
						} catch (SQLException e) {e.printStackTrace();}
	    	            
						finally{
								try 
								{
									// close connection
									rs.close();
									stmt.close();
									conn.close();
									Process(false);
								} 
	    	            			catch (SQLException e) {
	    	            				e.printStackTrace();
	    	            				Process(false);
	    	            				}
								NewChFrame printP = new NewChFrame (PaymentsPanel.this, str1);
								printP.setVisible(true);
						}
					}
       			}  		
        		
       		//*******************************************************************************
        		//Для кнопки Удалить запись
        		//*******************************************************************************
        		if (action.equals("Удалить запись")) 
        		{
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white))
        			{ 
        			
	        			yn = new YesNoDialog(PaymentsPanel.this, "Удалить запись?");
	   					yn.setVisible(true);
	   				
	   					if (yn.getResult())
	   					{
	   						Process(true);
	   						
	   						try{
	   							conn = DriverManager.getConnection(URL, "sa", "");
	   						} 
	       						catch (SQLException e2) {e2.printStackTrace();}
	       				
	   						Statement stmt = null;
	   						try {
	   							stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
	   						}
	   							catch (SQLException e) {e.printStackTrace();}
	    	            
	   						//удаляем запись по ID
	   						ResultSet rs = null;
	   						try {
	   							rs = stmt.executeQuery(
	   									"DELETE FROM sample" +
	   									" WHERE ID=" + 
	   										label_id.getText());
	   							
	   							System.out.println("*удалена запись*");
	   						}
	   							catch (SQLException e) {e.printStackTrace();}
						
	   						//выберем все записи
	   						try {
	   							rs = stmt.executeQuery("SELECT * FROM sample");
	   						}
	   							catch (SQLException e) {e.printStackTrace();}
	    	            
	   						//обновим поля формы
	   						try 
	   						{
	   							//если можно перейти на запись указанную в label_r
	   							if (rs.absolute(Integer.parseInt(label_r.getText())))
	   							{
	   								label_r.setText(Integer.toString(rs.getRow()));
													
	   								int id = rs.getInt("ID");
	   								label_id.setText(Integer.toString(id));
								
	   								choice_m.select(rs.getString("MANAGER"));
	   								input_d.setText(rs.getString("DAT"));
	   								choice_k.select(rs.getString("KLIENT"));
	   								input_n.setText(rs.getString("NN"));
	   								input_s.setText(rs.getBigDecimal("SUMA").toString());
	
	   								label_r.setText(Integer.toString(rs.getRow()));
	   								bname = "Обновить";
	   								bcolor = Color.RED;
			    	        	}
							
	   							//если нельзя то
	   							else
	   							{
	   								//если это последняя запись и label_r>0
	   								if (rs.last() && (Integer.parseInt(label_r.getText()) > 0))
	   								{
	   									//перейдем на предыдущую запись
	   									try 
	   									{
											//обновим поля формы
											rs.absolute(Integer.parseInt(label_r.getText()) - 1);
									
											int id = rs.getInt("ID");
											label_id.setText(Integer.toString(id));
										
											choice_m.select(rs.getString("MANAGER"));
											input_d.setText(rs.getString("DAT"));
											choice_k.select(rs.getString("KLIENT"));
											input_n.setText(rs.getString("NN"));
									 		input_s.setText(rs.getBigDecimal("SUMA").toString());
										
											label_r.setText(Integer.toString(rs.getRow()));
											bname = "Обновить";
											bcolor = Color.RED;
											System.out.println("**");
										}
	   											catch (SQLException e) {e.printStackTrace();}
			    	            	}
								
	   								//если нет
	   								else
	   								{	//если последняя запись в базе	
	   									if ((Integer.parseInt(label_r.getText()) == 1)) 
	   									{
	   										//choice_m.select("");
	   										//input_d.setText("" + nowDDMMYYYY + "");
	   										//choice_k.select("");
	   										input_n.setText("");
	   										input_s.setText("");
			        				
	   										label_r.setText("0");
	   										label_id.setText("0");
			        				
	   										bname = "Записать";
	   										bcolor = Color.LIGHT_GRAY;
	   										System.out.println("*нет записей*");
	   										
	   										CheckFields();
	   									}
	   								}
	   							}
							} 
	   							catch (SQLException e) {e.printStackTrace();}
							
	   						finally
	   						{
	   							try 
	   							{
	   								// close connection
	   								rs.close();
	   								stmt.close();
	   								conn.close();
	   								Process(false);
	   							} 
	   								catch (SQLException e) {
	   									e.printStackTrace();
	   									Process(false);
   									}
	   							
	   							//обновим TOTAL
		   						RefreshTotal();
		   						Process(false);
	   						}
						}
        			}
   				}	
        			
        		
       		//*******************************************************************************
       			//Для кнопки Пересоздать Базу
        		//*******************************************************************************
       			if (action.equals("Пересоздать базу"))
       			{
       				yn = new YesNoDialog(PaymentsPanel.this, "Пересоздать Базу?");
       				yn.setVisible(true);
       				
       				if (yn.getResult())
       				{
       					try{
       						Process(true);
       						ReCreateBase();
       						ClrForNewRecord();
       						CheckFields();
       					   					
       						YesDialog yd = new YesDialog(PaymentsPanel.this,"База создана заново!");
       						yd.setVisible(true);
       					}
       					finally{
       						Process(false);
       					}
       				}    
       			} 
       			
       			
       		//*******************************************************************************
       			//Помощь
        		//*******************************************************************************
       			if (action.equals("Помощь"))
       			{
       				YesDialog yd = new YesDialog(PaymentsPanel.this,
       						"Еще нет.");
					yd.setVisible(true);
       			} 
       			
       		//*******************************************************************************
       			//About
        		//*******************************************************************************
       			if (action.equals("About"))
       			{
       				
       				YesDialog yd = new YesDialog(PaymentsPanel.this,
       						"ООО Дринк Дистрибушн Систем." + System.getProperty("line.separator") + 
       						"Реестр Платежей.");
					yd.setVisible(true);
       			} 	
       			
       			
       			
       		}
		}; 
        
        
        //*******************************************************************************
		//Обработка нажатий кнопок
		//*******************************************************************************
        ActionListener buttonListener = new ActionListener() 
        {
        	public void actionPerformed(ActionEvent ae) 
        	{
        		String action = ae.getActionCommand();
        		
        		//*******************************************************************************
        		//Для кнопки Записать
        		//*******************************************************************************
        		if (action.equals("Записать")) 
        		{
        			CheckFields();
        			
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white)) 
        			{
        				Process(true); 
        				
        				Connection conn = null;
           				try {conn = DriverManager.getConnection(URL, "sa", "");}
        					catch (SQLException e1) {e1.printStackTrace();}
        				        				
        				// insert new record by using a named parameter
        	            try {conn.setAutoCommit(false);}
        	            	catch (SQLException e1) {e1.printStackTrace();}
						
        	            jdbcPreparedStatement pstmt = null;
						try 
						{
							pstmt = (jdbcPreparedStatement) conn.prepareStatement
									(
							            "INSERT INTO sample(MANAGER, KLIENT, NN, DAT, SUMA) "
							            + "VALUES('" +
							            	choice_m.getSelectedItem() + "', '" + 
							            	choice_k.getSelectedItem() + "', '" +
							            	input_n.getText() + "', '" +
							            	input_d.getText() + "', (" +
							            	BigDecimal.valueOf(Double.parseDouble(input_s.getText()))
							            + "))"
									);
						} 
							catch (SQLException e) {e.printStackTrace();}
        	            	
						try
						{   
        	                pstmt.executeUpdate();
						} 
							catch (SQLException e) {e.printStackTrace();}
        	                   	                
        	            finally
        	            {    
        	            	try 
        	            	{
        	            		pstmt.close();
								conn.commit();
	        	            	conn.close();
	        	            }
        	            		catch (SQLException e) {
        	            			e.printStackTrace();
        	            			Process(false);
        	            		}
        	            
        	            	System.out.println("Строка записана");
	        				
            				//на последнюю запись
                			LastRecord();
                			Process(false);
            				ClrForNewRecord();
            				CheckFields();
        	            }
        	        } 
        			
        			else{System.out.println("Проверьте введенные данные");}
        		}
        		
        		//*******************************************************************************
        		//Для кнопки Обновить
        		//*******************************************************************************
        		if (action.equals("Обновить")) 
        		{      	
        			CheckFields();
        			
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white)) 
        			{
        				yn = new YesNoDialog(PaymentsPanel.this, "Обновить запись?");
           				yn.setVisible(true);
           				
           				if (yn.getResult())
           				{
	        				Process(true);
	        				
	        				Connection conn = null;
	        				try {conn = DriverManager.getConnection(URL, "sa", "");}
	        					catch (SQLException e1) {e1.printStackTrace();}
	        				        				
	        				// insert new record by using a named parameter
	        	            try {conn.setAutoCommit(false);}
	        	            	catch (SQLException e1) {e1.printStackTrace();}
							
	        	            jdbcPreparedStatement pstmt = null;
							try 
							{
								pstmt = (jdbcPreparedStatement) conn.prepareStatement
																	
										(
												"UPDATE sample SET" +
												" MANAGER='" +
														choice_m.getSelectedItem() + "'," +
												" KLIENT='" +
														choice_k.getSelectedItem() + "'," +
												" NN='" +
														input_n.getText() + "'," +
												" DAT='" +
														input_d.getText() + "'," +
												" SUMA=" +
														BigDecimal.valueOf(Double.parseDouble(input_s.getText())) +
												" WHERE ID="+
														label_id.getText() 
										);
								
							} 
								catch (SQLException e) {e.printStackTrace();}
	        	            	
							try
							{
	        	                pstmt.executeUpdate();
							} 
								catch (SQLException e) {e.printStackTrace();}
	        	                   	                
	        	            finally
	        	            {    
	        	            	try 
	        	            	{
	        	            		pstmt.close();
									conn.commit();
		        	            	conn.close();
								}
	        	            		catch (SQLException e) {
	        	            			e.printStackTrace();
	        	            			Process(false);	
	        	            		}
	        	            	
	        	            	System.out.println("Строка обновлена и записана");
	            				RefreshTotal();
	            				Process(false);
	        	            }
           				}
        			} 
        			
        			else{System.out.println("Проверьте введенные данные");}
        		}
        		
        		//*******************************************************************************
        		//Для кнопки =
        		//*******************************************************************************
        		if (action.equals("="))
       			{
        			dateNow = new Date();
        			nowDDMMYYYY = new StringBuilder(dateformatDDMMYYYY.format(dateNow));
        			input_d.setText(""+nowDDMMYYYY+"");
       			} 
        		
        		//*******************************************************************************
        		//Для кнопки /\
        		//*******************************************************************************
        		if (action.equals("/\\"))
       			{
        			d=input_d.getText();
        			
        			Date dat = null;
        			try {
        				dat = dateformatDDMMYYYY.parse(d) ;
					}
        				catch (ParseException e) {e.printStackTrace();}
        		
        			dat.setTime(dat.getTime() + 1000 * 60 *60 * 24);
        			input_d.setText(new StringBuilder(dateformatDDMMYYYY.format(dat)).toString());
        		} 
        
        		//*******************************************************************************
        		//Для кнопки \/
        		//*******************************************************************************
        		if (action.equals("\\/"))
       			{
        			d=input_d.getText();
        			
        			Date dat = null;
        			try {
        				dat = dateformatDDMMYYYY.parse(d) ;
					}
        				catch (ParseException e) {e.printStackTrace();}
        		
        			dat.setTime(dat.getTime() - 1000 * 60 *60 * 24);
        			input_d.setText(new StringBuilder(dateformatDDMMYYYY.format(dat)).toString());
        		} 
        		
        		//*******************************************************************************
        		//Для кнопки <<
        		//*******************************************************************************
        		if (action.equals("<<"))
       			{
        			Process(true);
        			try{
        				FirstRecord();
        				CheckFields();
        			}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			} 
        		//*******************************************************************************
        		//Для кнопки >>
        		//*******************************************************************************
        		if (action.equals(">>"))
       			{
        			Process(true);
       				try {
       					LastRecord();
       					CheckFields();
       				}
       				finally{
       					if (Integer.parseInt(label_r.getText()) != 0){
       						bcolor = Color.RED;
        				}
       					Process(false);
       					
       				}
       			}
        		//*******************************************************************************
        		//Для кнопки <
        		//*******************************************************************************
        		if (action.equals("<"))
       			{
        			Process(true);
        			try{
        				PreviousRecord();
        				CheckFields();
        			}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			} 
        		//*******************************************************************************
        		//Для кнопки >
        		//*******************************************************************************
        		if (action.equals(">"))
       			{
        			Process(true);
        			try{
        				NextRecord();
        				CheckFields();
       				}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			}	
        		//*******************************************************************************
        		//Для кнопки *
        		//*******************************************************************************
        		if (action.equals("*"))
       				{
        				button_w.setBackground(Color.LIGHT_GRAY);
        				ClrForNewRecord();
        				CheckFields();
					} 
        		//*******************************************************************************
        		//Для кнопки ~
        		//*******************************************************************************
        		if (action.equals("~"))
       				{
        				Process(true);
        				try{
        					RefreshTotal();
        				}
        				finally{
        					Process(false);
        				}
					} 
				}  
			};
    
       	
		
//**************************************************************************************************************
		//*******************************************************************************
       	//Заполним Форму
		//*******************************************************************************
       	
       	// Панель Panel1
       	MenuBar mb1 = new MenuBar();
        setMenuBar(mb1);
        MenuItem mi;
        
        //Файл Menu...
        fm = new Menu("Файл");
        
        	fm.add(mi = new MenuItem("Загрузить Клиентов"));
        	mi.addActionListener(MenuListener);
        
        	fm.add(mi = new MenuItem("Выгрузить РП"));
        	mi.addActionListener(MenuListener);
        	fm.addSeparator();
        
        	fm.add(mi = new MenuItem("Выход"));
        	exitItem = mi; 						// save for action handler
        	mi.addActionListener(MenuListener);
        
        mb1.add(fm);

        //Сервис Menu...
        sm = new Menu("Сервис");
      	
        	//sm.add(mi = new MenuItem("Добавить клиента"));
        	//mi.addActionListener(MenuListener);
        
        	sm.add(mi = new MenuItem("Список платежей"));
        	mi.addActionListener(MenuListener);
        	sm.addSeparator();
        	
        	sm.add(mi = new MenuItem("Удалить запись"));
        	mi.addActionListener(MenuListener);
        	       	
        		//spSubm = new Menu("ТП по умолчанию");
        		//cb = new CheckboxMenuItem("Текущий менеджер");
        		//cb.addActionListener(MenuListener);
        		//spSubm.add(cb);
            	
            //sm.add(spSubm);
        	
        mb1.add(sm);
      	 
      	//БД Menu...
        bdm = new Menu("База");
      	
        	bdm.add(mi = new MenuItem("Пересоздать базу"));
        	mi.addActionListener(MenuListener);
        
        	//bdm.add(mi = new MenuItem("Проверить ошибки"));
        	//mi.addActionListener(MenuListener);
      	
        mb1.add(bdm);
      	
      //Help Menu...
        hlpm = new Menu("?");
      	
        	hlpm.add(mi = new MenuItem("Помощь"));
        	mi.addActionListener(MenuListener);
        
        	hlpm.add(mi = new MenuItem("About"));
        	mi.addActionListener(MenuListener);
      	
        mb1.add(hlpm);
        
        //**********************************************************************************
        //**********************************************************************************
        //Элементы формы
        Panel Panel1 = new Panel();
       	   	
       	GridBagLayout gbl = new GridBagLayout();
        Panel1.setLayout(gbl);
       
        GridBagConstraints c = new GridBagConstraints();
        
        c.anchor = GridBagConstraints.NORTHWEST; 
        c.fill   = GridBagConstraints.NONE;
                 
        c.ipadx = 1;
        c.ipady = 1;
        c.insets = new Insets(0, 0, 0, 1);
       	 
        c.weighty = 1.0;
        c.weightx = 0.0;
        		
        c.gridwidth  = 5;							//Количество ячеек в строке
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;								//Номер ячейки в строке
        c.gridy = 0;								//Номер ячейки в столбце
       	
        //Комбо с выбором менеджера
       	label_m = new java.awt.Label("Менеджер:");
        gbl.setConstraints(label_m, c);   
       		Panel1.add(label_m);
       	 
       	c.fill   = GridBagConstraints.HORIZONTAL;
       	c.weightx = 1.0;
       	c.gridwidth  = GridBagConstraints.REMAINDER ;	//занять остаток строки
       	c.gridheight = 1;							   	//Количество ячеек в колонке
       	c.gridx = 5;									//Номер ячейки в строке
        c.gridy = 0;									//Номер ячейки в столбце
       	
       	choice_m = new Choice();
       	gbl.setConstraints(choice_m, c);
       		Panel1.add(choice_m);
      
       	//Для ввода даты	
       	c.fill   = GridBagConstraints.NONE;
       	c.insets = new Insets(0, 0, 1, 1);
       	c.weightx = 0.0;
       	 c.gridwidth  = 2;							//Количество ячеек в строке
         c.gridheight = 1;						   	//Количество ячеек в колонке
         c.gridx = 0;
         c.gridy = 1;
       		
       		label_d = new java.awt.Label("Дата:");
       		gbl.setConstraints(label_d, c); 
           		Panel1.add(label_d);
   		   	 
           	c.anchor = GridBagConstraints.NORTHEAST; 
           	c.fill   = GridBagConstraints.NONE;
           	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 2;
            c.gridy = 1;
                  
           		updat = new Button("/\\");
           			gbl.setConstraints(updat, c); 
           			updat.addActionListener(buttonListener);
           			Panel1.add(updat);
           		
           		 c.anchor = GridBagConstraints.NORTHWEST; 
           		 c.gridwidth  = 1;							//Количество ячеек в строке
                 c.gridheight = 1;						   	//Количество ячеек в колонке
                 c.gridx = 3;
                 c.gridy = 1;
                               	
           		downdat = new Button("\\/");
           			gbl.setConstraints(downdat, c); 
           			downdat.addActionListener(buttonListener);
           			Panel1.add(downdat);
           			
           		 c.anchor = GridBagConstraints.CENTER; 
           		 c.gridwidth  = 1;							//Количество ячеек в строке
                 c.gridheight = 1;						   	//Количество ячеек в колонке
                 c.gridx = 4;
                 c.gridy = 1;
           			
        		nowdat = new Button("=");
        			gbl.setConstraints(nowdat, c); 
           			nowdat.addActionListener(buttonListener);
           			Panel1.add(nowdat);
        
        c.anchor = GridBagConstraints.NORTHWEST; 
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        c.gridwidth  = GridBagConstraints.REMAINDER ;//занять остаток строки           			
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 5;
        c.gridy = 1;
        
        input_d = new TextField();
        gbl.setConstraints(input_d, c); 
        	input_d.addTextListener(TextL);
        	input_d.addFocusListener(FocusL);
        	Panel1.add(input_d);
  
        c.fill   = GridBagConstraints.NONE;	
        c.insets = new Insets(0, 0, 0, 1);
        c.weightx = 0.0;
        c.gridwidth  = 2;							//Количество ячеек в строке
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 2;								//Номер ячейки в столбце
        //комбо выбора клиента
        label_k = new java.awt.Label("Клиент:");
        gbl.setConstraints(label_k, c); 
        	Panel1.add(label_k);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.gridwidth  = GridBagConstraints.REMAINDER;
        c.weightx = 1.0;
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 2;
        c.gridy = 2;								//Номер ячейки в столбце
        	
        choice_k = new Choice();
        gbl.setConstraints(choice_k, c); 
          	//choice_k.setFont(TR10pt);
            choice_k.addFocusListener(FocusL);
        	Panel1.add(choice_k);
         
        //поле для ввода номера НН
        c.fill   = GridBagConstraints.NONE;	
        c.insets = new Insets(0, 0, 1, 1);
        c.weightx = 0.0;
    	c.gridwidth  = 5;							//Количество ячеек в строке
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 3;								//Номер ячейки в столбце
        label_n = new java.awt.Label("Ном.НН:");
        gbl.setConstraints(label_n, c); 
        	Panel1.add(label_n);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
        c.gridheight = 1;						   		//Количество ячеек в колонке
        c.gridx = 5;
        c.gridy = 3;								//Номер ячейки в столбце
        input_n = new TextField();
        gbl.setConstraints(input_n, c); 
        	input_n.addTextListener(TextL);
        	input_n.addFocusListener(FocusL);
        	Panel1.add(input_n);
        	//input_n.setBackground(Color.red);
        
        //поле для ввода суммы
        c.fill   = GridBagConstraints.NONE;	
        c.weightx = 0.0;
    	c.gridwidth  = 5;							//Количество ячеек в строке
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 4;								//Номер ячейки в столбце
        label_s = new java.awt.Label("Сумма:");
        gbl.setConstraints(label_s, c); 
        	Panel1.add(label_s);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
    	c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
        c.gridheight = 1;						   		//Количество ячеек в колонке
        c.gridx = 5;
        c.gridy = 4;								//Номер ячейки в столбце
        input_s = new TextField();
        gbl.setConstraints(input_s, c); 
        	input_s.addTextListener(TextL);
        	input_s.addFocusListener(FocusL);
        	Panel1.add(input_s);
        	//input_s.setBackground(Color.red);
        	
        //*******************************************************************************
       	//Итоговая сумма
		//*******************************************************************************
       
        //Для обновления total
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 4;							//Количество ячеек в строке
            c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 5;								//Номер ячейки в столбце
        	
       		java.awt.Label label_total = new java.awt.Label("Итог ТП+Дата:");
       		gbl.setConstraints(label_total, c); 
       			Panel1.add(label_total);
       		
       			c.anchor = GridBagConstraints.CENTER; 
       			c.fill   = GridBagConstraints.HORIZONTAL;
       			c.gridwidth  = 1;							//Количество ячеек в строке
                c.gridheight = 1;						   		//Количество ячеек в колонке
                c.gridx = 4;
                c.gridy = 5;								//Номер ячейки в столбце
                
       		totalrfr = new Button("~");
       		gbl.setConstraints(totalrfr, c); 
       			totalrfr.addActionListener(buttonListener);
       			Panel1.add(totalrfr);
       	
       		c.anchor = GridBagConstraints.NORTHWEST;
       		 c.fill   = GridBagConstraints.HORIZONTAL;
       		c.weightx = 1.0;
       		 c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
             c.gridheight = 1;						   		//Количество ячеек в колонке
             c.gridx = 5;
             c.gridy = 5;								//Номер ячейки в столбце
       
            label_t = new java.awt.Label("0.0");
            gbl.setConstraints(label_t, c); 
        	label_t.setBackground(Color.ORANGE);
        	Panel1.add(label_t);
        
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 5;							//Количество ячеек в строке
            c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 6;								//Номер ячейки в столбце
        
        java.awt.Label label_row = new java.awt.Label("Запись ном.:");
        gbl.setConstraints(label_row, c); 
        	Panel1.add(label_row);
        
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.gridwidth  = GridBagConstraints.REMAINDER;							//Количество ячеек в строке
        	c.weightx = 1.0;
            c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 5;
            c.gridy = 6;								//Номер ячейки в столбце
        label_r = new java.awt.Label("0");
        gbl.setConstraints(label_r, c); 
        	Panel1.add(label_r);
        	
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 5;							//Количество ячеек в строке
            c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 7;								//Номер ячейки в столбце
        java.awt.Label label_rowid = new java.awt.Label("ID:");
        gbl.setConstraints(label_rowid, c); 
        	Panel1.add(label_rowid);
        
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.weightx = 1.0;
        	c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
            c.gridheight = 1;						   		//Количество ячеек в колонке
            c.gridx = 5;
            c.gridy = 7;								//Номер ячейки в столбце
        label_id = new java.awt.Label("");
        gbl.setConstraints(label_id, c);
        	Panel1.add(label_id);
        
       
        //*******************************************************************************
       	//Кнопки
		//*******************************************************************************
        	c.anchor = GridBagConstraints.NORTHWEST; 
        	c.fill   = GridBagConstraints.NONE;
        	c.ipady = 5;
        	c.weightx = 0.0;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 8;								//Номер ячейки в столбце
    		
        firstr = new Button("<<");
        gbl.setConstraints(firstr, c);
        	firstr.addActionListener(buttonListener);
        	firstr.setSize(100, 100);
        	Panel1.add(firstr);
        	
        	c.ipadx = 5;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 1;
            c.gridy = 8;								//Номер ячейки в столбце
    		
        prevr = new Button("<");
        gbl.setConstraints(prevr, c);
        	prevr.addActionListener(buttonListener);
        	Panel1.add(prevr);
        	
        	c.anchor = GridBagConstraints.NORTHEAST; 
        	c.ipadx = 5;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 2;
            c.gridy = 8;								//Номер ячейки в столбце
        	
        nextr = new Button(">");
        gbl.setConstraints(nextr, c);
        	nextr.addActionListener(buttonListener);
        	Panel1.add(nextr);
        	
        	c.ipadx = 1;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 3;
            c.gridy = 8;								//Номер ячейки в столбце
        	
        lastr = new Button(">>");
        gbl.setConstraints(lastr, c);
        	lastr.addActionListener(buttonListener);
        	Panel1.add(lastr);
       
        	c.anchor = GridBagConstraints.CENTER; 
        	c.ipadx = 5;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 4;
            c.gridy = 8;								//Номер ячейки в столбце
        	
        newr = new Button("*");
        gbl.setConstraints(newr, c);
        	newr.addActionListener(buttonListener);
        	Panel1.add(newr);
      
        	c.anchor = GridBagConstraints.NORTHWEST; 
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.ipadx = 1;
        	c.weightx = 1.0;
        	c.gridwidth  = GridBagConstraints.REMAINDER;
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 5;
            c.gridy = 8;								//Номер ячейки в столбце
                
        button_w = new Button("Записать");
        gbl.setConstraints(button_w, c);
        	button_w.addActionListener(buttonListener);
        	Panel1.add(button_w);
        	button_w.setBackground(Color.LIGHT_GRAY);
        	      
       add(Panel1, BorderLayout.NORTH);
       // this.pack();
 
	    //**************************************************************************
	    //**************************************************************************
	    //**************************************************************************
	    
        //Process(true);
        //загрузить список клиентов
        LoadKlients(false);
        
        //выбрать менеджера по умолчанию из prop
        //choice_m.select(MANAGER);
        
        //Установить курсор на первую строку
        // LastRecord();
        
        //записать текущую дату в поле
        input_d.setText(""+nowDDMMYYYY+"");
        
        //Очистить поля
        ClrForNewRecord();
        
        //RefreshTotal();
        
        CheckFields();
       // Process(false);
        
  }

//**********************************************************************************************************************
//**********************************************************************************************************************
//ФУНКЦИИ
	
	//Для проверки корректности полей
	private static void CheckFields(){
		
		d=input_d.getText();
		n=input_n.getText();
		s=input_s.getText();
		
		if (choice_m.getSelectedItem() == null || choice_m.getSelectedItem() == ""){
			choice_m.setBackground(Color.red);
		}	
		else {
			choice_m.setBackground(Color.white);
		}
		
		if (choice_k.getSelectedItem() == null || choice_k.getSelectedItem() == ""){
				choice_k.setBackground(Color.red);
		}	
		else {
			choice_k.setBackground(Color.white);
		}
					
		if (d.matches("^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)\\d\\d$")){
				input_d.setBackground(Color.white);
		}	
		else {
			input_d.setBackground(Color.red);
		}
		
		if (n.matches(".+")){
			input_n.setBackground(Color.white);
		}	
		else {
			input_n.setBackground(Color.red);
		}
		
		if (s.matches("(\\d{1,10})$|(\\d{1,10}[.]?\\d{1,2})$")){
			input_s.setBackground(Color.white);
		}	
		else {
			input_s.setBackground(Color.red);
		}
	}
	
	//загрузить список клиентов
	private static void LoadKlients(boolean openf /**  выбрать файл в проводнике */){
		
		// Диалог открытия файла
		if (openf){
			fileXls  = new File(ufd.loadFile(new Frame(), "Open...", DOWNLOAD_DIR, ".xls")); // take xls file as program argument
		}
		else{
			fileXls  = new File(DOWNLOAD_DIR, MANAGER2 + ".xls"); // take xls file as program argument	
		}
		
		if (!fileXls.exists()){
			return;
		}
				
		try 
		{
				choice_m.setVisible(false);							//скрыть, для более бытрого добавления в список
				choice_k.setVisible(false);
            								
				try {
					workbookR = Workbook.getWorkbook(new File(fileXls.toString()),wbSettings);
				}
					catch (IOException e) {e.printStackTrace();} 
					catch (JXLException e) {e.printStackTrace();}
				
				excelSheetR = workbookR.getSheet(0); 
		
				Cell a1 = excelSheetR.getCell(1,1);
				String stringa1 = a1.getContents();
				
				choice_m.removeAll();
				managers.clear();
				choice_k.removeAll();
				klients.clear();
					
				managers.add(stringa1.trim());
				//choice_m.addItem(stringa1.trim());	// считать первую строку менеджера
				choice_m.addItem("");
				choice_k.addItem("");

				Cell b2 = excelSheetR.getCell(0,1);
				String stringb2 = b2.getContents();
				
				int i;
				for	(i=1;i < excelSheetR.getRows();i++)
				{
					b2 = excelSheetR.getCell(0,i);
					stringb2 = b2.getContents();
					
					klients.add(stringb2.trim());
				}
		        
   		}
		finally	{
			try{
				Add2Choice();
				
				String managers2[] = new String[managers.size()];
				managers.toArray(managers2);
				Arrays.sort(managers2);
				
				int i;
				for	(i=0; i < managers2.length; i++)
				{
					choice_m.addItem(managers2[i]);
				}
				
				String klients2[] = new String[klients.size()];
				klients.toArray(klients2);
				Arrays.sort(klients2);
			
				for	(i=0; i < klients2.length; i++)
				{
					choice_k.addItem(klients2[i]);
				}
			}
			finally{
				managers.clear();
				klients.clear();
				choice_m.setVisible(true);
				choice_k.setVisible(true);
				workbookR.close();
			}
		}
		
		choice_k.requestFocus();
		
		CheckFields();
		RefreshTotal();
		
	}
	
	
//****************************************************************************************************	
//****************************************************************************************************
	//функции для работы с базой

	//*******************************************************
	//Для перехода на следующую запись
	private static void NextRecord(){
		
		conn = null;
		try{conn = DriverManager.getConnection(URL, "sa", "");} 
			catch (SQLException e2) {e2.printStackTrace();}
		
		Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			if (rs.absolute(Integer.parseInt(label_r.getText())))
			{
				if (!rs.isLast())
				{
				
					rs.absolute(Integer.parseInt(label_r.getText()) + 1);
			
					int id = rs.getInt("ID");
					label_id.setText(Integer.toString(id));
				
					choice_m.select(rs.getString("MANAGER"));
					input_d.setText(rs.getString("DAT"));
					choice_k.select(rs.getString("KLIENT"));
					input_n.setText(rs.getString("NN"));
					input_s.setText(rs.getBigDecimal("SUMA").toString());
					
					label_r.setText(Integer.toString(rs.getRow()));
					
					bname="Обновить";
					System.out.println("*Выбрана следующая запись*");
					RefreshTotal();
				}
			}
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	   // close connection
        		rs.close();
			    stmt.close();
			    conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields(); 
		
	}
	
	
	//*******************************************************
	//Для перехода на предыдущую запись
	private static void PreviousRecord(){
			
		conn = null;
		try{conn = DriverManager.getConnection(URL, "sa", "");} 
			catch (SQLException e2) {e2.printStackTrace();}
			
        Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			if (rs.absolute(Integer.parseInt(label_r.getText())))
			{
				if (!rs.isFirst())
				{
					rs.absolute(Integer.parseInt(label_r.getText()) - 1);
			
					int id = rs.getInt("ID");
					label_id.setText(Integer.toString(id));
				
					choice_m.select(rs.getString("MANAGER"));
					input_d.setText(rs.getString("DAT"));
					choice_k.select(rs.getString("KLIENT"));
					input_n.setText(rs.getString("NN"));
			 		input_s.setText(rs.getBigDecimal("SUMA").toString());
					
					label_r.setText(Integer.toString(rs.getRow()));
					
					bname="Обновить";
					System.out.println("*Выбрана предыдущая запись*");
					RefreshTotal();
				}
			}
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	    // close connection
        		rs.close();
			    stmt.close();
			    conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		 
		//CheckFields();
	
	}
	
	
	//*******************************************************
	//Для перехода на первую запись
	private static void FirstRecord(){
		
		conn = null;
		try{conn = DriverManager.getConnection(URL, "sa", "");} 
			catch (SQLException e2) {e2.printStackTrace();}
		
        Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			
			if(rs.first())
			{	
				int id = rs.getInt("ID");
				label_id.setText(Integer.toString(id));
			
				choice_m.select(rs.getString("MANAGER"));
				input_d.setText(rs.getString("DAT"));
				choice_k.select(rs.getString("KLIENT"));
				input_n.setText(rs.getString("NN"));
				input_s.setText(rs.getBigDecimal("SUMA").toString());
				
				label_r.setText(Integer.toString(rs.getRow()));
				
				bname="Обновить";
				System.out.println("*Выбрана первая запись*");
				RefreshTotal();
			}
		
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	   // close connection
        		rs.close();
			    stmt.close();
			    conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields();	
		
	}
	
	//*******************************************************
	//Для перехода на последнюю запись
	private static void LastRecord(){
		
		try{conn = DriverManager.getConnection(URL, "sa", "");} 
			catch (SQLException e2) {e2.printStackTrace();}
			    	            
        Statement stmt = null;
		try 
		{
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
		}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;
							
		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			
			if(rs.last())
			{
				int id = rs.getInt("ID");
				label_id.setText(Integer.toString(id));
				choice_m.select(rs.getString("MANAGER"));
				input_d.setText(rs.getString("DAT"));
				choice_k.select(rs.getString("KLIENT"));
				input_n.setText(rs.getString("NN"));
			 	input_s.setText(rs.getBigDecimal("SUMA").toString());
			
			 	label_r.setText(Integer.toString(rs.getRow()));
				
			 	bname="Обновить";
				System.out.println("*Выбрана последняя запись*");
				RefreshTotal();
			}
		 
		}
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        		// close connection
        		rs.close();
			    stmt.close();
			    conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields();
	
	}
	
	//*******************************************************
	//Пересоздать Базу
	private static void ReCreateBase(){
		
		try {conn = DriverManager.getConnection(URL, "sa", "");
				
			Statement stmt = conn.createStatement();
		           stmt.executeUpdate
		            	(  
		           			"DROP TABLE sample IF EXISTS"
            		 );
		            
		            stmt.executeUpdate
		            	(  
		            			"DROP TABLE klients IF EXISTS"
		            	);
		            
		            stmt.executeUpdate
		            	(
		            		"CREATE TABLE sample"
		            		+"("
		                       	+ "ID INTEGER" +
		                       	 " GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1)" +
		                       	 " PRIMARY KEY"
		                       	+ ", MANAGER VARCHAR(50)"
		                       	+ ", KLIENT VARCHAR(50)"
		                       	+ ", NN VARCHAR(50)"
		                       	+ ", DAT VARCHAR(50)"
		                       	+ ", SUMA DECIMAL(10,2)"
		                    + ")"
		                );
		            
		            stmt.executeUpdate
		            (
		            		"CREATE TABLE klients"
		         			+"("
		         				+ "ID INTEGER" +
		         				 " GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1)" +
		         				 " PRIMARY KEY" 
		           				+ ", MANAGER VARCHAR(50)"
		           				+ ", KLIENT VARCHAR(50)"
		         			+ ")"
		            );
		            stmt.close();
				}
		            catch (SQLException e1) {e1.printStackTrace();} 	
		        
		        finally
		        {
		        	try
		        	{
		        		conn.close();
		        		
		        	} 
		          		catch (SQLException e) {
		          			e.printStackTrace();
		          			}
		        }
	}
	
	
	//*******************************************************
	//Для  очистки полей под новую запись
	private static void ClrForNewRecord(){
		//choice_m.select("");
		//input_d.setText("" + nowDDMMYYYY + "");
		
		input_n.setText("");
		input_s.setText("");
		
		button_w.setLabel("Записать");
        System.out.println("Очистим поля для новой записи");
                
        //CheckFields();
    }
	
	private static void Add2Choice(){
			
		Connection conn = null;
				
			try{
					conn = DriverManager.getConnection(URL, "sa", "");
				} 
					catch (SQLException e2) {e2.printStackTrace();}
			
				System.out.println("*Выбрать все записи по ТП и по Дате*");
        
            Statement stmt = null;
			try {stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);}
				catch (SQLException e) {e.printStackTrace();}
            
			ResultSet rs = null;
			
			try 
			{
				rs = stmt.executeQuery("SELECT MANAGER FROM sample" +
										" GROUP BY MANAGER"						
										);
			}
				catch (SQLException e) {e.printStackTrace();}
            
			try {
				while (rs.next())
				{
					managers.add(rs.getString(1));
					//choice_m.addItem( rs.getString(1));
				 }

			}
				catch (SQLException e) {e.printStackTrace();}
            
			try 
			{
				rs = stmt.executeQuery("SELECT KLIENT FROM sample" +
										" GROUP BY KLIENT"						
										);
			}
				catch (SQLException e) {e.printStackTrace();}
			
			try {
				
				while (rs.next())
				{
					if (rs.getString(1) != null){
						klients.add(rs.getString(1));
					}
					//choice_k.addItem( rs.getString(1));
				 }
			}
				catch (SQLException e) {e.printStackTrace();}
			
			finally
            {
				try 
            	{
            	   // close connection
					rs.close();
				    stmt.close();
				    conn.close();
				   
				} 
            		catch (SQLException e) {
            			e.printStackTrace();
            			
            			}
            }
	} 
	//*******************************************************
	//Для  обновления TOTAL
	private static BigDecimal RefreshTotal(){
		
		if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white))
		{
		
			conn = null;
			try{conn = DriverManager.getConnection(URL, "sa", "");} 
				catch (SQLException e2) {e2.printStackTrace();}
			
			//	select all
			System.out.println("*Обновить TOTAL*");
        
			Statement stmt = null;
			try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
				catch (SQLException e) {e.printStackTrace();}
        
			ResultSet rs2 = null;
			try 
			{
				rs2 = stmt.executeQuery("SELECT DAT, MANAGER, sum(SUMA) AS TOTAL FROM sample" +
										" where DAT = '" + 
													input_d.getText() + 
										"' and MANAGER = '" +
													choice_m.getSelectedItem() + 
										"' GROUP BY DAT, MANAGER");
			}
				catch (SQLException e) {e.printStackTrace();}
        
			summ = BigDecimal.ZERO;
			try 
			{
				if(rs2.first())
				{
					rs2.first();
					summ = rs2.getBigDecimal("TOTAL");
				}
			} 
				catch (SQLException e2) {e2.printStackTrace();}
		 					
			label_t.setText(summ.toString());
       
			try 
			{
				// close connection
				rs2.close();
				stmt.close();
				conn.close();
			} 
       			catch (SQLException e) {e.printStackTrace();}
       	}
		return summ;
	}
	
	
	private static void Process(boolean t){
		
		if (t){
			bcolor = button_w.getBackground();
			button_w.setBackground(Color.ORANGE);
			
			bname = button_w.getLabel();
			button_w.setLabel("Идет обработка");
			
			nowdat.setEnabled(false);
			updat.setEnabled(false);
			downdat.setEnabled(false);
			
			totalrfr.setEnabled(false);
						
			button_w.setEnabled(false);
			firstr.setEnabled(false);
			nextr.setEnabled(false);
			prevr.setEnabled(false);
			lastr.setEnabled(false);
			newr.setEnabled(false);
			
			choice_m.setEnabled(false);
			input_d.setEnabled(false);
			choice_k.setEnabled(false);
			input_n.setEnabled(false);
			input_s.setEnabled(false);
			
			fm.setEnabled(false);
			sm.setEnabled(false);
			bdm.setEnabled(false);
		}
		
		else{
			button_w.setBackground(bcolor);
	   		button_w.setLabel(bname);
	   		
	   		choice_m.setEnabled(true);
			input_d.setEnabled(true);
			choice_k.setEnabled(true);
			input_n.setEnabled(true);
			input_s.setEnabled(true);
	   		
			nowdat.setEnabled(true);
			updat.setEnabled(true);
			downdat.setEnabled(true);
			
			totalrfr.setEnabled(true);			
			
	   		button_w.setEnabled(true);
	   		firstr.setEnabled(true);
			nextr.setEnabled(true);
			prevr.setEnabled(true);
			lastr.setEnabled(true);
			newr.setEnabled(true);
	   		
			fm.setEnabled(true);
			sm.setEnabled(true);
			bdm.setEnabled(true);
		}
	}

	public void actionPerformed(ActionEvent e) {}


	public void textValueChanged(TextEvent arg0){}

	
	public void itemStateChanged(ItemEvent arg0) {}
 }
	